package base

import "fmt"

func GetMin(list []int) (min int) {
	// 声明初始值
	min = list[0]
	for _, value := range list {
		if value < min {
			min = value
		}
	}

	return
}

func ReturnMany(x, y int) (int, int) {
	return x + y, x * y
}

func ManyParams(arg ...int) {
	// 可变参数中，接收到的 arg 是切片类型的数据
	fmt.Println(arg)
	// 遍历
	for _, value := range arg {
		fmt.Println(value)
	}

}

func PointerDelivery(x, y *int) int {
	tmp := *x
	*x = *y
	*y = tmp

	return tmp
}

func NonameMethod() {
	x, y := 6, 8
	defer func(a int) {
		fmt.Println("defer :", a, y)
	}(x)

	x += 100
	y += 100
	fmt.Println(x, y)
	// 匿名函数的调用
	// 1. 声明后调用
	f := func(num int) int {
		return num * 2
	}

	fmt.Printf("调用匿名函数：%d\n", f(3))
	// 2.直接调用
	num := func(num int) int {
		return num * 2
	}(2)

	fmt.Println(num)
	// 匿名函数作为回掉函数使用

	slice := []int{4, 6, 8}
	testMethod(&slice, func(key, value int) {
		slice[key] = value * 2
	})

	fmt.Println(slice)
}

func testMethod(list *[]int, f func(key, value int)) []int {
	for key, value := range *list {
		f(key, value)
	}

	return *list
}
